package dataaccess;


import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import model.Livro;

public class LivroDao extends DataAccessCore{

	public LivroDao(){
		super();
	}

	public Livro buscaLivroISBN(Livro livro) {

		ResultSet resultado;
		Livro livroResposta = null;


		String sql = "SELECT * " +
				"FROM livros "+
				"WHERE isbn=?";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1,livro.getIsbn());

			resultado = stmt.executeQuery();

			if(resultado.first()){
				livroResposta = new Livro(resultado.getString("isbn"));
				livroResposta.setAno(resultado.getInt("ano"));
				livroResposta.setAutor(resultado.getString("autor"));
				livroResposta.setClassificacao(resultado.getInt("classificacao"));
				livroResposta.setEditora(resultado.getString("editora"));
				livroResposta.setNome(resultado.getString("nome"));
				livroResposta.setSinopse(resultado.getString("sinopse"));
				livroResposta.setAtivo(0);
			}

			stmt.close();


		}catch (SQLException e) {
			throw new RuntimeException(e);
		}

		return livroResposta;

	}

	public int insereLivro(Livro livro) {

		ResultSet resultado;
		int resposta = 0;


		String sql = "INSERT INTO livros(isbn,ano,autor,classificacao,editora,nome,sinopse,ativo)" +
				"VALUES (?,?,?,?,?,?,?,?)";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1,livro.getIsbn());
			stmt.setInt(2,livro.getAno());
			stmt.setString(3,livro.getAutor());
			stmt.setInt(4,livro.getClassificacao());
			stmt.setString(5,livro.getEditora());
			stmt.setString(6,livro.getNome());
			stmt.setString(7,livro.getSinopse());
			stmt.setInt(8,livro.isAtivo());

			resposta = stmt.executeUpdate();
			System.out.println(resposta);
			stmt.close();

		}catch (SQLException e) {
			throw new RuntimeException(e);
		}

		return resposta;

	}

	public ArrayList<Livro> buscaLivrosISBN(ArrayList<String> isbns) {

		ResultSet resultado;
		ArrayList<Livro> livros;
		String complementoSql = " ";
		int qntLivros = isbns.size();

		
		
		for (int i = 0; i < qntLivros ; i++) {

			complementoSql += "?";

			if(i < qntLivros -1){
				complementoSql += ",";
			}
		}

		complementoSql += " )";

		String sql = "SELECT * " +
				"FROM livros "+
				"WHERE isbn IN (" + complementoSql;

		System.out.println(sql);
		
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			int j = 0;
			for (j = 0; j < qntLivros; j++) {

				stmt.setString(j+1,isbns.get(j));
				
			}

			resultado = stmt.executeQuery();

			if(resultado.first()){
				
				livros = new ArrayList<Livro>();
				do {
					Livro livro = new Livro(resultado.getString("isbn"));
					livro.setAno(resultado.getInt("ano"));
					livro.setAutor(resultado.getString("autor"));
					livro.setClassificacao(resultado.getInt("classificacao"));
					livro.setEditora(resultado.getString("editora"));
					livro.setNome(resultado.getString("nome"));
					livro.setSinopse(resultado.getString("sinopse"));
					livro.setAtivo(resultado.getInt("ativo"));
					livros.add(livro);

					System.out.println(livros);

				}while(resultado.next());
			}else{
				System.out.println("out");
				livros = null;
			}

			stmt.close();

		}catch (SQLException e) {
			throw new RuntimeException(e);
		}

		return livros;
	}


	/*	public void adiciona(User contato) {

	         stmt.execute();
	         stmt.close();
	     } catch (SQLException e) {
	         throw new RuntimeException(e);
	     }
	 }

  public List<User> getLista() {
	     try {
	         List<User> contatos = new ArrayList<User>();
	         PreparedStatement stmt = this.connection.
	                 prepareStatement("select * from contatos");
	         ResultSet rs = stmt.executeQuery();

	         while (rs.next()) {
	             // criando o objeto Contato
	             User contato = new User();
	             contato.setId(rs.getString("id"));
	             contato.setName(rs.getString("nome"));
	             contato.setEmail(rs.getString("email"));
	             contato.setLogin(rs.getString("login"));
	             contato.setPassword(rs.getString("password"));
	             contato.setRg(rs.getString("rg"));
	             contato.setCpf(rs.getString("cpf"));


	             // montando a data através do Calendar
	             Calendar data = Calendar.getInstance();
	             data.setTime(rs.getDate("birthday"));
	             contato.setBirthday(data);

	             // adicionando o objeto à lista
	             contatos.add(contato);
	         }
	         rs.close();
	         stmt.close();
	         return contatos;
	     } catch (SQLException e) {
	         throw new RuntimeException(e);
	     }
	 }*/

}
